<?php
/*
Модуль для создания поля загрузки файлов.
Автор: Andrew Shapovalov
Созданно: 28.02.2010
Обновленно: */

/*Класс для поля загрузки файлов в html-формах*/
class SHAV_Uploader
{
	var $frmName = 'uploadfile';
	var $btnId = 'upload';
	var $statusId = 'status';
	var $actionSrcipt = './upload_file.php';
	var $errorMsg = 'Ошибка в типе файла!';
	var $actionMsg = 'Загрузка...';
	var $typesOfFiles = array('gif','png','jpg','jpeg');
	var $datas = array();
	var $title = 'Загрузить файл';
	var $content = '';

	/**/
	function SHAV_Uploader(){}

	/*Инициализация объекта по массиву параметров.
	ПАРАМЕТРЫ:
		$params - массив параметров для настройки скрипта: array('error_msg'=>'',
																'action_msg'=>'',
																'action_scr'=>'upload_file.php',
																'name'=>'upload',
																'types_of_files'=>array('gif','png',....));
		$type - тип компонента: 1 - список обычных полей; 2 - Ajax кнопка для загрузки использую jQuery.
	РЕЗУЛЬТАТ:
		Содержимое для вывода на экран*/
	function initWithArray($params, $type = 1)
	{
		if(!is_array($params))
		{
			echo ERROR_ARRAYS_0100;
			return;
		}
		
		if(empty($params) && $isDraw == true)
		{
			echo MSG_ARRAYS_0002;
			return;
		}

		$this->frmName =  $params['name'];
		$this->btnId = $params['id'];
		$this->statusId = $params['status_id'];
		$this->actionSrcipt = $params['action_scr'];
		$this->errorMsg = $params['error_msg'];
		$this->actionMsg = $params['action_msg'];
		$this->typesOfFiles = $params['types_of_files'];
		$this->datas = $params['datas'];

		switch($type)
		{
			case 1: $this->content = $this->createContent();
				break;
			case 2: $this->content = $this->createContentAjax();
				break;
		}
	}

	/*Создаение контента по-умолчанию*/
	function init()
	{
		$this->content = $this->createContent();
	}

	/*Выводит html-код поля для загрузки файлов*/
	function drawContent($isDraw = false)
	{
		if($isDraw == true)
			echo $this->content;
		else
			return $this->content;
	}

	/*Создает список для загрузки файлов N*/
	private function createContent()
	{
		$js  = '<script type="text/javascript">';
		$js .= 'function changeCountField_'.$this->frmName.'(){
					var str = "";
					var cont = "";
					var i = 0;
					$("input#count").each(function () {
						str = $(this).val();
					});

					for(i=0; i<(str-1); i++)
					{
						cont = cont + "<tr><td><input type=\"file\" name=\"file_" + i + "\" id=\"file_"+i+"\" value=\"\" /></td></tr>";
					}

					$("#content_file_list").html(cont);
				}';
		$js .= '</script>';
		
		$content  = $js.'<table width="100%">';
		$content .= '<tr><td clospan="2" align="center"><label for="'.$this->frmName.'">'.$this->title.'</td></tr>';
		$content .= '<tr><td clospan="2">Количество файлов для загрузки: <input type="text" name="count" id="count" size="5" value="1" onChange="changeCountField_'.$this->frmName.'();"/></td></tr>';
		$content .= '<tr><td clospan="2"><div width="100%" id="content_file_list"><tr><td><input type="file" name="file_1" id="file_1" value="" /></td></tr></div></td></tr>';
		$content .= '</tr>';
		$content .= '</table>';

		return $content;
	}
	
	/*Создает содержимое для вывода*/
	private function createContentAjax()
	{
		$files_type = '';
		foreach($this->typesOfFiles as $rec)
			$files_type .= $rec.'|';
		$files_type = substr($files_type, 0, strlen($files_type)-1);
		
		$data = '';
		if(is_array($this->datas) && !empty($this->datas))
		{
			$data = 'data: {';
			foreach($this->datas as $key=>$value)
			{
				$data .= $key.': \''.$value.'\', ';
			}
			$data = substr($data, 0, strlen($data)-2).'},';
		}
		
		$content = '<script type="text/javascript" src="/js/ajaxupload.3.5.js"></script>
		<link rel="stylesheet" type="text/css" href="/css/styles.css" /><script type="text/javascript">
		$(function(){
			var btnUpload=$(\'#'.$this->btnId.'\');
			var status=$(\'#'.$this->statusId.'\');
			new AjaxUpload(btnUpload, {
				action: \''.$this->actionSrcipt.'\',
				name: \''.$this->frmName.'\',
				'.$data.'
				onSubmit: function(file, ext){
					if (! (ext && /^('.$files_type.')$/.test(ext))){
						// extension is not allowed
						status.text(\''.$this->errorMsg.'\');
						return false;
					}
					status.text(\''.$this->actionMsg.'\');
				},
				onComplete: function(file, response){
					//On completion clear the status
					status.text(\'\');
					//Add uploaded file to list
					if(response==="success"){
						$(\'<li></li>\').appendTo(\'#files\').html(\'<div align="center"><img src="./uploads/\'+file+\'" alt="" /><br /><b style="margin:5px 0 0 0;">\'+file+\'</b></div>\').addClass(\'success\');
					} else{
						$(\'<li></li>\').appendTo(\'#files\').html(file+\'<br />Response: \'+response).addClass(\'error\');
					}
				}
			});
		});
		</script>'.shav_createUploadFileLink('Загрузить картинку');

		return $content;
	}
}
?>